package com.nowcoder.topic.string.middle;

import java.math.BigInteger;

/**
 * NC359 大数相减
 * @author d3y1
 */
public class NC359{
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param num1 string字符串
     * @param num2 string字符串
     * @return string字符串
     */
    public String substring (String num1, String num2) {
        return solution1(num1, num2);
//        return solution2(num1, num2);
    }

    /**
     * 模拟法
     * @param num1
     * @param num2
     * @return
     */
    private String solution1(String num1, String num2){
        boolean isNegative = false;
        if(num1.length() < num2.length()){
            isNegative = true;
        }else if(num1.length() == num2.length()){
            for(int i=0; i<num1.length(); i++){
                if(num1.charAt(i) < num2.charAt(i)){
                    isNegative = true;
                    break;
                }
            }
        }

        if(isNegative){
            String tmp = num1;
            num1 = num2;
            num2 = tmp;
        }

        int len1 = num1.length();
        int len2 = num2.length();
        char[] num1Chars = num1.toCharArray();
        char[] num2Chars = num2.toCharArray();
        int digit1,digit2;
        int digit;
        StringBuilder sb = new StringBuilder();
        for(int i=len1-1,j=len2-1; i>=0; i--,j--){
            digit1 = num1Chars[i]-'0';
            digit2 = j>=0?num2Chars[j]-'0':0;

            if(digit1 >= digit2){
                digit = digit1 - digit2;
            }else{
                // 向高位借1
                int hDigit;
                for(int k=i-1; k>=0; k--){
                    hDigit = num1Chars[k]-'0';
                    if(hDigit > 0){
                        num1Chars[k]--;
                        break;
                    }else{
                        num1Chars[k] += 9;
                    }
                }
                digit = digit1 + 10 - digit2;
            }

            sb.append(digit);
        }

        String result = sb.reverse().toString();

        // 为0
        String regex = "0+";
        if(result.matches(regex)){
            return "0";
        }
        // 去掉前缀0
        for(int i=0; i<result.length(); i++){
            if(result.charAt(i) != '0'){
                result = result.substring(i);
                break;
            }
        }
        // 负数
        if(isNegative){
            result = "-"+result;
        }

        return result;
    }

    /**
     * BigInteger()
     * @param num1
     * @param num2
     * @return
     */
    private String solution2(String num1, String num2){
        return new BigInteger(num1).subtract(new BigInteger(num2)).toString();
    }
}